意図せぬクロス結合を防ぐためinner joinを使う
古いコードではfromの中でテーブルを加えていく書き方が見られるかもしれない
code:sql
select
v1.name, v2.name
from
sys.system_views as v1, sys.system_views as v2
where
v1.name <> v2.name;
code:whereを書き忘れた.sql
select
v1.name, v2.name
from
sys.system_views as v1, sys.system_views as v2;
あっ、と思ってもこれで通ってしまう
ただし、書き方としては間違いではない
inner joinを使う場合、onを忘れると構文エラーにしてくれるDBMSが多い
code:sql
select
v1.name, v2.name
from
sys.system_views as v1
inner join sys.system_views as v2
on v1.name <> v2.name;
code:onを書き忘れた.sql
select
v1.name, v2.name
from
sys.system_views as v1
inner join sys.system_views as v2;
これはエラーにしてくれる
MySQLは通るらしい…
PostgreSQL、Oracleはエラーになる、SQL Serverは手元で実行できるがこれもエラーだった
table:result
'v2' 付近に不適切な構文があります。
参考